package method

import (
	"encoding/json"
	"errors"
	"io"
	"log"
	"net/http"

	"github.com/gin-gonic/gin"
)

func ParseJSON(c *gin.Context, targetStruct interface{}) error {
	// 读取请求体
	data, err := io.ReadAll(c.Request.Body)
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"message": "读取请求体错误",
		})
		return err
	}
	defer c.Request.Body.Close() // 确保关闭请求体

	// 可选：在调试时打印请求体内容
	// 注意：在生产环境中，这可能会暴露敏感信息
	// log.Println(string(data))

	// 解析 JSON 到结构体

	if len(data) == 0 {
		c.JSON(http.StatusBadRequest, gin.H{
			"message": "没有body信息",
		})
		return errors.New("没有body信息")
	}

	if err := json.Unmarshal(data, targetStruct); err != nil {
		log.Println(err)
		c.JSON(http.StatusBadRequest, gin.H{
			"message": "解析 JSON 错误",
		})
		return err
	}

	return nil
}
